package sv.com.servicio.seguridad.usuario.rems;

import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

import sv.com.modelo.seguridad.rems.Rol;
import sv.com.modelo.seguridad.rems.Usuario;
import sv.com.modelo.seguridad.rems.UsuarioXRol;

public class UsuarioImpl implements UsuarioServicio {
	private EntityManager em;
	
	@PersistenceContext
    public void setEntityManager(EntityManager em) {
        this.em = em;
    }

	private EntityManager getEntityManager() {
        return em;
    }

	
	public List<Usuario> findAll() {
		   Query query = getEntityManager().createQuery("select p FROM Person p");
	        return query.getResultList();

	}
	
	
	@SuppressWarnings("unchecked")
	@Transactional (propagation = Propagation.REQUIRED, readOnly = false)
	public Usuario buscarPorNombreContrasena(String nombreUsuario, String contrasena){
		Query query = em.createQuery("select u FROM usuario u where u.idUsuario = ? and u.passwordUsuario = ?");
		query.setParameter(1, nombreUsuario);
		query.setParameter(2, contrasena);
        List<Usuario> usuario = query.getResultList(); 
		if(usuario!=null && usuario.size()==1)
			return (Usuario)usuario.get(0);
		else return null;
	}
	
	
	@SuppressWarnings("unchecked")
	@Transactional (propagation = Propagation.REQUIRED, readOnly = false)
	public Rol buscarRol(String nombreUsuario){
		Query query = em.createQuery("select r FROM UsuarioXRol r where r.usuario.idUsuario = ?");
		query.setParameter(1, nombreUsuario);
        List<UsuarioXRol> usuarioRol = query.getResultList(); 
		if(usuarioRol!=null && usuarioRol.size()==1){
			UsuarioXRol rXu = usuarioRol.get(0);
			Rol r= rXu.getRol();
			return r;
		}else{
			return null;
		}
			
	}
	
	public void save(Usuario person) {
		// TODO Auto-generated method stub
		
	}

	public void remove(int id) {
		// TODO Auto-generated method stub
		
	}

	public Usuario find(int id) {
		// TODO Auto-generated method stub
		return null;
	}


}
